package bszt.ele;

import java.util.Scanner;

public class Code01 {

    /**
     * 问题描述
     * K小姐是一位魔法师，她最近发明了一种神奇的字符串变形术。这种魔法可以将由'0'和'1'组成的字符串进行变形。每次施法，K小姐可以选择字符串中的任意一个字符，将'0'变成'1'，或将'1'变成'0'
     * 现在，K小姐想知道，如果她恰好施法k次，是否能将给定的字符串变成一个回文串。回文串是指从左往右读和从右往左读都一样的字符串
     * <p></p>
     * 输入格式
     * 第一行输入一个整数T，表示测试用例的数量。
     * 对于每个测试用例：
     * 第一行包含两个整数n和k，分别表示字符串的长度和施法次数
     * 第二行包含一个长度为n的字符串s，仅由字符'0'和'1'组成
     * <p></p>
     * 输出格式
     * 对于每个测试用例，如果K小姐恰好施法k次后能将字符串变成回文串，输出"YES"；否则输出"NO"。每个答案占一行
     */

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        while (t-- > 0) {
            int n = sc.nextInt();
            int k = sc.nextInt();
            String s = sc.next();
            System.out.println(solve(n, k, s) ? "YES" : "NO");
        }
    }

    public static boolean solve(int n, int k, String s) {
        int count = 0;
        int l = 0, r = n - 1;
        while (l < r) {
            if (s.charAt(l) != s.charAt(r)) {
                count++;
            }
            l++;
            r--;
        }
        if (count > k) return false;
        else if ((k - count) % 2 == 0) {
            return true;
        } else if (n % 2 == 1) {
            return true;
        }
        return false;
    }
}
